home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / assembler / progasm1.lha / SORGENTI / LEZIONE3c2.s < prev    next >
Text File  |  1994-10-30  |  3KB  |  113 lines

  1.  
  2. ; Lezione3c2.s    ; BARRETTA CHE SCENDE FATTA CON MOVE&WAIT DEL COPPER
  3.         ; (PER FARLA SCENDERE USATE IL TASTO DESTRO DEL MOUSE)
  4.  
  5. ;    Aggiunto un controllo della linea raggiunta per fermare lo scroll
  6.  
  7.  
  8.     SECTION    MaremmaCop,CODE    ; anche in Fast va bene
  9.  
  10. Inizio:
  11.     move.l    4.w,a6        ; Execbase in a6
  12.     jsr    -$78(a6)    ; Disable - ferma il multitasking
  13.     lea    GfxName(PC),a1    ; Indirizzo del nome della lib da aprire in a1
  14.     jsr    -$198(a6)    ; OpenLibrary, routine della EXEC che apre
  15.                 ; le librerie, e da in uscita l'indirizzo
  16.                 ; di base di quella libreria da cui fare le
  17.                 ; distanze di indirizzamento (Offset)
  18.     move.l    d0,GfxBase    ; salvo l'indirizzo base GFX in GfxBase
  19.     move.l    d0,a6
  20.     move.l    $26(a6),OldCop    ; salviamo l'indirizzo della copperlist
  21.                 ; di sistema
  22.     move.l    #COPPEROZZA,$dff080    ; COP1LC - Puntiamo la nostra COP
  23.     move.w    d0,$dff088        ; COPJMP1 - Facciamo partire la COP
  24.  
  25.  
  26. mouse:
  27.     cmpi.b    #$ff,$dff006    ; VHPOSR - Siamo alla linea 255?
  28.     bne.s    mouse        ; Se non ancora, non andare avanti
  29.  
  30.     btst    #2,$dff016    ; POTINP - Tasto destro del mouse premuto?
  31.     bne.s    Aspetta        ; Se no, non eseguire Muovicopper
  32.  
  33.     bsr.s    MuoviCopper    ; Questa subroutine fa scendere il WAIT!
  34.                 ; e viene eseguita 1 volta ogni schermata video
  35. Aspetta:
  36.     cmpi.b    #$ff,$dff006    ; VHPOSR - Siamo alla linea 255?
  37.     beq.s    Aspetta        ; Se si, non andare avanti, aspetta la linea
  38.                 ; seguente, altrimenti MuoviCopper viene
  39.                 ; rieseguito
  40.  
  41.     btst    #6,$bfe001    ; tasto sinistro del mouse premuto?
  42.     bne.s    mouse        ; se no, torna a mouse:
  43.  
  44.     move.l    OldCop(PC),$dff080    ; COP1LC - Puntiamo la cop di sistema
  45.     move.w    d0,$dff088        ; COPJMP1 - facciamo partire la cop
  46.  
  47.     move.l    4.w,a6        ; Execbase in A6
  48.     jsr    -$7e(a6)    ; Enable - riabilita il Multitasking
  49.     move.l    gfxbase(PC),a1    ; Base della libreria da chiudere
  50.                 ; (vanno aperte e chiuse le librerie!!!)
  51.     jsr    -$19e(a6)    ; Closelibrary - chiudo la graphics lib
  52.     rts
  53.  
  54. ;
  55. ;    Questa piccola routine fa scendere il wait del copper aumentandolo,
  56. ;    infatti la prima volta che sara' eseguito cambiera' il
  57. ;
  58. ;    dc.w    $2007,$FFFE    ; WAIT - aspetto la linea $20
  59. ;
  60. ;    in:
  61. ;
  62. ;    dc.w    $2107,$FFFE    ; WAIT - aspetto la linea $21!
  63. ;
  64. ;    e cosi' via, fino al massimo specificato, in questo caso $fc
  65. ;
  66.  
  67. MuoviCopper:
  68.     cmpi.b    #$fc,BARRA    ; siamo arrivati alla linea $fc?
  69.     beq.s    Finito        ; se si, siamo in fondo e non continuiamo
  70.     addq.b    #1,BARRA    ; WAIT 1 cambiato, la barra scende di 1 linea
  71. Finito:
  72.     rts
  73.  
  74. ;    In questo caso se BARRA: ha raggiunto il valore $fc si salta l'addq
  75.  
  76. ;    P.S: per ora non si puo' raggiungere la parte finale dello
  77. ;    schermo dopo il $FF, vi spieghero' in seguito perche' e come fare.
  78.  
  79. GfxName:
  80.     dc.b    "graphics.library",0,0    ; NOTA: per mettere in memoria
  81.                     ; dei caratteri usare sempre il dc.b
  82.                     ; e metterli tra "", oppure ''
  83.  
  84. GfxBase:        ; Qua ci va l'indirizzo di base per gli Offset
  85.     dc.l    0    ; della graphics.library
  86.  
  87. OldCop:            ; Qua ci va l'indirizzo della vecchia COP di sistema
  88.     dc.l    0
  89.  
  90.     SECTION    MiaCoppy,DATA_C    ; Le copperlist DEVONO essere in CHIP RAM!
  91.  
  92. COPPEROZZA:
  93.     dc.w    $100,$200    ; BPLCON0 - no bitplanes, solo sfondo.
  94.  
  95.     dc.w    $180,$004    ; COLOR0 - Inizio la cop col colore BLU SCURO
  96.  
  97. BARRA:
  98.     dc.w    $7907,$FFFE    ; WAIT - aspetto la linea $79
  99.  
  100.     dc.w    $180,$600    ; COLOR0 - inizio la zona rossa: rosso a 6
  101.  
  102.     dc.w    $FFFF,$FFFE    ; FINE DELLA COPPERLIST
  103.  
  104.     end
  105.  
  106. Come modifica, provate a cambiare il $fc della linea
  107.  
  108.     cmpi.b    #$fc,BARRA
  109.  
  110. Mettendoci valori diversi e verificherete che la barra scende fino alla
  111. linea che specificate.
  112.  
  113.